package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.*;
import com.ipartek.formacion.gestformwww.modelo.beans.*;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author David y Karmele
 */
public class VisualizarCursoAccion implements Accion {

    private final String listarcursos = "listar-cursos-accion";
    private final String listaralumnos = "listar-alumnos-accion";
    private final String listarmodulos = "listar-modulos-accion";
    private final String listarmaterial = "listar-entrega-accion";
    private final String visualizarcalendario = "visualizar-calendario-accion";

    /**
     * Carga los datos del curso y llama a las acciones de la pestaña correspondiente
     * @param servlet
     * @param request
     * @param response
     * @return Devuelve el router que llevara el nombre de la jsp que corresponda
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion;
        String path = null;
        AccionServlet as = (AccionServlet) servlet;
        sesion = request.getSession();
        AccionRouter router;
        ModeloCurso modelo = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        ModeloCliente mcliente = (ModeloCliente) servlet.getServletContext().getAttribute("ModeloCliente");
        Curso curso = null;
        ArrayList<Alumno> alumnos = (ArrayList<Alumno>) request.getAttribute("listaalumnos");
        ArrayList<Cliente> clientes = new ArrayList<Cliente>();
        ArrayList<TipoCurso> tiposcurso = new ArrayList<TipoCurso>();
        ArrayList<String> lugares = new ArrayList<String>();
        Integer id = -1;

        int idPestana = -1;
        if (request.getAttribute("idPestana") != null) {
            idPestana = Integer.parseInt(request.getAttribute("idPestana").toString());
        }

        if (sesion.getAttribute("usuario") == null) {
            router = new AccionRouter("inicio", false);
        } else {
            router = new AccionRouter("principal");

            if (Verificador.numeroValido(request.getParameter("idCurso")) || (request.getAttribute("idCurso") != null)) {
                if (request.getAttribute("idCurso") != null) {
                    id = Integer.parseInt(request.getAttribute("idCurso").toString());
                } else {
                    id = Integer.parseInt(request.getParameter("idCurso"));
                }
                try {
                    curso = modelo.visualizarCurso(id);
                } catch (GestorFormacionExcepcion ex) {
                    sesion.setAttribute("excepciones", ex.getMessage());
                    Logger.getLogger(VisualizarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (curso != null) {
                    try {
                        clientes = mcliente.listarClientes();
                        tiposcurso = modelo.listarTipoCurso();
                        lugares = modelo.listarLugares();
                    } catch (GestorFormacionExcepcion ex) {
                        sesion.setAttribute("excepciones", ex.getMessage());
                        Logger.getLogger(VisualizarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    request.setAttribute("visualizacurso", curso);
                    request.setAttribute("listaclientes", clientes);
                    request.setAttribute("listatipos", tiposcurso);
                    request.setAttribute("listalugares", lugares);
                    request.setAttribute("contenido", "visualiza-curso");
                    
                    //cargarAlumnos(servlet, request, response);

                    request.setAttribute("listaAlumnos", alumnos);
                    request.setAttribute("contenido-curso", "lista-alumnos");

                    if (Verificador.numeroValido(request.getParameter("idPestana"))) {
                        idPestana = Integer.parseInt(request.getParameter("idPestana"));
                    }
                    switch (idPestana) {
                        default:
                            path = listaralumnos;
                            break;
                        case 2:
                            path = visualizarcalendario;
                            break;
                        case 3:
                            //Llamar a la accion listar modulos
                            path = listarmodulos;
                            break;
                        case 4:
                            //Llamar a la accion listar material
                            path = listarmaterial;
                            break;
                    }
                } else {
                    path = listarcursos;
                }
            } else {
                path = listarcursos;
            }
        }
        try {
            router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(VisualizarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(VisualizarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(VisualizarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
        }

        return router;
    }
}
